import java.util.Scanner;
import java.util.*;

public class XY1140排斥序列 {
    public static void main(String[] args) {

        Scanner input = new Scanner(System.in);
        // code here
        int n = input.nextInt();
        int[] arr = new int[n];
        for (int i = 0; i < n; i++) {
            arr[i] = input.nextInt();
        }

        Arrays.sort(arr);
        long totalWays = 1;
        long mod = 1000000007;

        for (int i = 0; i < n; i++) {
            /*
             规则书: 这就是我们排序后的 b 数组：[1, 2, 3, 3]。
             规则0: 放入 盒子0 的球，编号必须 ≤ 1。
             规则1: 放入 盒子1 的球，编号必须 ≤ 2。
             规则2: 放入 盒子2 的球，编号必须 ≤ 3。
             规则3: 放入 盒子3 的球，编号必须 ≤ 3。
             */
//            数量 = 最大值 - 最小值 + 1
            int step = arr[i] - i + 1;
            if (step <= 0) {
                totalWays = 0;
                break;
            }
            totalWays = (totalWays * step) % mod;
        }
        System.out.println(totalWays);
        input.close();
    }
}
